/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2025-06-08     Administrator       the first version
 */
#ifndef APPLICATIONS_BSP_KEY_H_
#define APPLICATIONS_BSP_KEY_H_

#include <bsp.h>

/* 按键引脚定义 */
#define KEY1_PIN    GET_PIN(A, 0)
#define KEY2_PIN    GET_PIN(A, 1)
#define KEY3_PIN    GET_PIN(A, 2)
//#define KEY4_PIN    GET_PIN(C, 13)

/* 按键事件类型 */
enum key_event {
    KEY_EVENT_NONE = 0,
    KEY_EVENT_CLICK,       // 单击
    KEY_EVENT_DOUBLE_CLICK,// 双击
    KEY_EVENT_LONG_PRESS   // 长按
};

/* 按键状态结构 */
struct key {
    rt_base_t pin;         // 按键引脚
    rt_uint8_t state;      // 当前状态
    rt_uint32_t press_time;// 按下时间
    rt_uint32_t last_time; // 上次释放时间
    enum key_event event;  // 检测到的事件
};

/* 按键配置参数 */
#define KEY_DEBOUNCE_TIME   20    // 消抖时间(ms)
#define KEY_LONG_PRESS_TIME 1000  // 长按时间(ms)
#define KEY_DOUBLE_TIME     300   // 双击间隔时间(ms)




/* 按键初始化 */
void keys_init(void);
/* 按键扫描函数（在应用程序中定期调用） */
void keys_scan(void);
/* 获取按键事件 */
enum key_event get_key_event(int key_index);
/* 按键测试函数 */
void keys_test(void);

#endif /* APPLICATIONS_BSP_KEY_H_ */
